/**
 * 防抖：对于高频触发的事件，事件触发后等待一定时间再执行回调，如果在等待的时间内再次触发则重新等待。
 * 使用场景：
 * 搜索框输入 - 在用户输入时，防抖模式会等待用户停止输入后再执行搜索，减少不必要的请求
 * 滚动事件 - 处理页面滚动时，防抖可以显著减少事件触发次数
 * 在调整窗口大小时，防抖可以减少触发频率，优化性能
 * @param {*} fn  需要防抖的函数
 * @param {*} delay  防抖的时间
 */
function debounce(fn, delay) {
    let timer = null;

    return function(...args) {
        if (timer) clearTimeout(timer);
        timer = setTimeout(() => {
            fn.apply(this, args);
            timer = null;
        }, delay);
    }
}